package model;

import java.util.Random;

import model.enums.FamilieNaam;
import model.enums.Gemeente;
import model.enums.Naam;
import model.enums.StraatPrefix;
import model.enums.StraatSuffix;

/**  
 * 
 * @author Dimitri Verschueren
 * 
 * and Dimitri Breuval
 *
 */

public class Randoms 
{
	// Returns a random adres (street + nr + city)
	public String randomAdres()
	{		
		return randomStraatPrefix()+randomStraatSuffix()+" "+randomHouseNumbre ()+" "+randomGemeente();
	}
	
	// Returns a generated name
	public String randomGenerateName()
	{
	return randomNaam()+" "+randomFamilieNaam();	
	}
	
	// random to get amounth of time
	public int randomCursusTime ()
	{
		Random t = new Random();
  int uur = t.nextInt(4) + 1;
 		return uur;
		}
		
	// random to get a code
	public int randomCode ()
	{
		Random t = new Random();
  int nr = t.nextInt(9998) + 1;
 		return nr;
		}

	// random to get a housenumbre
	private int randomHouseNumbre ()
	{
		Random t = new Random();
  int nr = t.nextInt(250) + 1;
 		return nr;
		}
	
	// returns a first name (string) via randomEnum method
  public String randomNaam ()
  {
	  String naam;
	  
	   final RandomEnum <Naam> r 
	  =new RandomEnum<Naam>(Naam.class);
	  
	  naam = r.random().toString();
	  
	  return naam;	  
  }
  
	// returns a family name (string) via randomEnum method
    public String randomFamilieNaam ()
  {
	  String famNaam;
	  
	   final RandomEnum <FamilieNaam> r 
	  =new RandomEnum<FamilieNaam>(FamilieNaam.class);
	  
	  famNaam = r.random().toString();
	  
	  return famNaam;	  
  }
  
  	// returns a street prefix (string) via randomEnum method
      private String randomStraatPrefix ()
  {
	  String pfStraat;
	  
	   final RandomEnum <StraatPrefix> r 
	  =new RandomEnum<StraatPrefix>(StraatPrefix.class);
	  
	  pfStraat = r.random().toString();
	  
	  return pfStraat;	  
  }
  
    	// returns a street suffix (string) via randomEnum method
        private String randomStraatSuffix()
  {
	  String sfStraat;
	  
	   final RandomEnum <StraatSuffix> r 
	  =new RandomEnum<StraatSuffix>(StraatSuffix.class);
	  
	  sfStraat = r.random().toString();
	  
	  return sfStraat;	  
  }
  
    	// returns a city (string) via randomEnum method
          public String randomGemeente()
  {
	  String gemeente;
	  
	   final RandomEnum <Gemeente> r 
	  =new RandomEnum<Gemeente>(Gemeente.class);
	  
	  gemeente = r.random().toString();
	  
	  return gemeente;	  
  }
  
  
  
  
  
  // Class to create a random of every enum 
  private static class RandomEnum<E extends Enum>
  	 {

      private static final Random RND = new Random();
      private final E[] values;

      public RandomEnum(Class<E> token) 
      {
          values = token.getEnumConstants();
      }

 		 	public E random() 
 			{
     		return (E)values[RND.nextInt(values.length)];
   		}
 		}	
}
